package com.efe.ms.esservice.service;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;

import com.efe.ms.common.vo.PaginationVO;
import com.github.pagehelper.PageInfo;

/**
 * @author hhx
 * @date 2020-11-02
 */
public interface BaseSearchService {
	/***
	 * 创建引擎库
	 * 
	 * @param t Class
	 */
	void create(Class<?> t);

	/***
	 * 不分引擎库根据字段匹配查询数据 不分页
	 * 
	 * @param keyValue    查询字段值
	 * @param keyName    查询字段名称
	 * @param fieldsName 返回结果字段
	 * @param excludes   排除
	 * @param indices    引擎库
	 * @return
	 */
	List<?> getAllIndex(String keyValue, String keyName, String[] fieldsName, String[] excludes,int  pageIndex,int pageSize, String... indices);

	/***
	 * 
	 * @param indices  引擎库名称
	 * @param id        值
	 * @return
	 */
	Object queryById(String indices, String id) throws IOException;

	/***
	 * 组装查询数据 精准查询
	 * 
	 * @param parm      字段查询
	 * @param pageIndex 页码
	 * @param pageSize  每页数据量
	 * @param keyValue   值查询 匹配所有字段中值相等的数据
	 * @param orderBy   排序字段名称
	 * @param order     排序
	 * @return 返回SearchSourceBuilder 查询组装字符串
	 */
	SearchSourceBuilder getSearchSourceBuilder(Map<String, String> parm, String keyValue,int pageIndex, int pageSize ,
			String orderBy, SortOrder order);

	/***
	 * 获取分页数据
	 * 
	 * @param searchSourceBuilder
	 * @param pageIndex           页码
	 * @param pageSize            每页数据量
	 * @param documentClass       查询库对应的索引的实体映射
	 * @return 返回 查询结果实体分页数据
	 * @throws Exception
	 */
	<T> PaginationVO<T> searchGetPage(SearchSourceBuilder searchSourceBuilder, int pageIndex, int pageSize,
			Class<T> documentClass) throws Exception;
	/***
	 *  封装分页数据
	 * @param pageIndex
	 * @param pageSize
	 * @param documentClass
	 * @param list
	 * @param total
	 * @return
	 */
	<T> PaginationVO<T> getPageData(int pageIndex, int pageSize, Class<T> documentClass, List<T> list,
			int total) ;
	/***
	 * 
	 * @param indices 引擎库 可以多个
	 * @param searchSourceBuilder  查询的 条件
 	 * @return json字符串 
	 * @throws IOException
	 */
	String searchToJson(String indices, SearchSourceBuilder searchSourceBuilder) throws IOException;

}
